package cn.gok.day5;

import java.io.*;
import java.util.*;

/**
 * @ClassName Test
 * @Description TODO
 * @Author HP
 * @Date 9:35 2022/7/8
 * @Version 1.0
 **/
public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
//        把对象写入文件
//        writeFile();
//        从文件中读取对象
//        readerFile();
//        二进制读写
//        twoWrite();
//        twoReader();
//    ArrayList常用方法：遍历
//        ArrayList<Float> list=new ArrayList<>();
//        list.add(1.0F);
//        list.add(2.0F);
//        list.add(3.0F);
//        toArray1(list);
//        Set遍历（无序序<集）JDK1.8之后，如果产生哈希碰撞，就会用链表存储，如果链表长度超过八，就采用红黑树。Set<值,链表>我们add存入的是map的key,value用来存链表或者红黑树的首个数据指针
        setSteam();
    }

    private static void writeFile() throws IOException {
        ObjectOutputStream obos=new ObjectOutputStream(new FileOutputStream("D:\\Oscar\\Code\\Code1\\src\\cn\\gok\\day5\\1.dat"));
        Role r1=new Role("李逍遥",50,10,"刺客",new Wu("七星剑"));
        Role r2=new Role("灵儿",30,40,"法师",new Wu("法杖"));
        Role r3=new Role("拜月教主",80,60,"BOSS",new Wu("蛇杖"));

//        写入对象流
        obos.writeObject(r1);
        obos.writeObject(r2);
        obos.writeObject(r3);

//        关闭资源
        obos.close();
        System.out.println("对象存储完成...");

    }
    private static void readerFile() throws IOException, ClassNotFoundException {
        ObjectInputStream obin=new ObjectInputStream(new FileInputStream("D:\\Oscar\\Code\\Code1\\src\\cn\\gok\\day5\\1.dat"));
//        不断读取文件，直到文件末尾
        try {
            while (true){
                Object ob=obin.readObject();
//                根据读取的对象做转型
                if(ob instanceof Role){
                    ((Role) ob).doWork();
                }
                System.out.println(ob);
            }
        }catch (EOFException e){
//            利用异常跳出循环
            System.out.println("文件读取结束");
        }finally {
            obin.close();
        }

    }
//    二进制写入
    public static void twoWrite() throws IOException {
        DataOutputStream dos=new DataOutputStream(new FileOutputStream("D:\\Oscar\\Code\\Code1\\src\\cn\\gok\\day5\\2.dat"));
        dos.writeInt(10);
        dos.writeDouble(0.258);
        dos.writeUTF("罗涛涛");

//        关闭资源
        dos.close();
        System.out.println("二进制写入完成");

    }
//    二进制读取
    public static void twoReader() throws IOException {
        DataInputStream din=new DataInputStream(new FileInputStream("D:\\Oscar\\Code\\Code1\\src\\cn\\gok\\day5\\2.dat"));
        System.out.println(din.readInt());
        System.out.println(din.readDouble());
        System.out.println(din.readUTF());

//        关闭资源
        din.close();
        System.out.println("二进制读结束");

    }
//    ArrayList常用方法
    public static void toArray1(ArrayList<Float> list){
//        三种遍历方式
        System.out.println("第一种方式：利用for循环实现遍历");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+" ");
        }
        System.out.println();
        System.out.println("第2种方式：利用增强for循环实现遍历");
        for (Float f: list) {
            System.out.print(f+" ");
        }
        System.out.println();
        System.out.println("第三种方式：利用迭代器实现遍历");
        Iterator<Float> in=list.iterator();
        while (in.hasNext()){
            System.out.print(in.next()+" ");//走到下一个元素，返回该元素
        }
        System.out.println();
        System.out.println("利用流的函数式编程实现：三种写法，利用的是JDK1.8的Labdam表达式");
        list.stream().forEach((Float f)-> System.out.print(f+" "));
        System.out.println();
        list.stream().forEach(f-> System.out.print(f+" "));
        System.out.println();
        list.stream().forEach(System.out::println);

    }
    public static void toArray2(ArrayList list){


    }
    public static void toArray3(ArrayList list){


    }
    public static void linkedList(){
        LinkedList<String> list=new LinkedList<>();
        list.addFirst("aaa");//插入到最前面
        list.addLast("bbb");//插入到最后面
        list.push("ccc");//模仿栈，放入最底层
        //
    }
    public static void setSteam(){
        Set<String> set=new HashSet<>();
        set.add("a123");
        set.add("b123");
        set.add("c123");
        set.stream().forEach(System.out::println);

    }
}
